package com.example.dynamicproxy;

import com.example.dynamicproxy.proxy.MyInvocationHandler;
import com.example.dynamicproxy.service.StudentService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @version 1.0.0
 * @className: TestApi
 * @description:
 * @author: zhangjunfa
 * @date: 2022/6/21 10:34
 */
public class TestApi {
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring-config.xml");
        //获取执行原有功能的对象
        StudentService studentServiceImpl = (StudentService) ac.getBean("studentServiceImpl");
        //以上两步是用spring集成mybatis 所实现的对象的创建（可以直接用new的方式去获取）
        //创建InvocationHandler对象
        InvocationHandler invocationHandler=new MyInvocationHandler(studentServiceImpl);
        //使用jdk携带的proxy进行动态代理 (参数1：原有功能对象的类 参数2：原有功能对象类所实现的接口 参数3：代理对象要执行的功能)
        StudentService proxy= (StudentService) Proxy.newProxyInstance(studentServiceImpl.getClass().getClassLoader(),
                studentServiceImpl.getClass().getInterfaces(),invocationHandler);
        //测试 执行升级后的test
        proxy.test();

    }
}
